// // useChatRoom.ts
// import { shallowReactive, onUnmounted } from "vue";
// import { ElMessage } from "element-plus";
// import ChatSDK, { type EasemobChat } from "easemob-websdk";

// // type Connection = EaseMob.Connection;
// // type ChatRoom = EaseMob.ChatRoom;
// // type MessageBody = EaseMob.MessageBody;

// interface ChatConfig {
//   appKey: string;
//   user: string; // 环信用户ID
//   password: string; // 环信用户Token
//   isHost?: boolean; // 是否主播（有创建房间权限）
// }

// /**
//  * @property id - 创建后生成的
//  * @property name - 聊天室名称。
//  * @property description - 聊天室描述。
//  * @property maxusers - 聊天室允许的最大成员数（包括聊天室创建者），默认值 200，最大不超过 5,000。
//  * @property members - ['user1', 'user2']聊天室成员。此属性可选，但是如果包含此项，数组元素至少一个。
//  */
// interface RoomInfo {
//   id: string;
//   name: string;
//   description?: string;
//   maxUsers?: number;
// }

// interface ChatMessage {
//   id: string;
//   sender: string;
//   content: string;
//   timestamp: number;
//   isRecall: boolean;
// }

// const useChatRoom = () => {
//   /**
//    * IM 客户端实例（shallowRef 优化性能）
//    * @description 用于进行房间的创建加入监听信息等
//    */
//   const connection = shallowReactive<{
//     instance?: EasemobChat.Connection;
//     // currentRoom?: EasemobChat.ChatRoom;
//   }>({});
//   /**
//    * 客户端配置（浅层响应式）
//    * @description 包含连接IM和加入登录的参数，以及当前用户的权限
//    */
//   const config = shallowReactive<ChatConfig>({
//     appKey: "",
//     user: "",
//     password: "",
//     isHost: false,
//   });
//   /**
//    * 应用状态管理（浅层响应式）
//    * @property isConnected - sdk是否初始化完成
//    * @property isInRoom - 是否在房间内
//    * @property messages - 聊天室消息列表
//    * @property members - 当前在线用户列表
//    * @property roomInfo - 当前房间信息
//    */
//   const state = shallowReactive({
//     isConnected: false,
//     isInRoom: false,
//     messages: [] as ChatMessage[],
//     members: [] as string[],
//     roomInfo: null as RoomInfo | null,
//   });

//   // ===================== 事件监听 =====================
//   const setupListeners = () => {
//     if (!connection.instance) return;

//     // 全局连接事件
//     connection.instance.addEventHandler("connectionListener", {
//       onConnected: () => {
//         state.isConnected = true;
//         ElMessage.success("IM连接成功");
//       },
//       onDisconnected: () => {
//         state.isConnected = false;
//         ElMessage.warning("IM连接断开");
//       },
//     });

//     // 聊天室事件
//     connection.instance.addEventHandler("CHATROOM", {
//       onChatroomEvent: (e: EasemobChat.ChatroomEvent) => {
//         switch (e.operation) {
//           case "memberPresence":
//             ElMessage.info(e.id + "进来了");
//             break;
//           case "memberAbsence":
//             ElMessage.info(e.id + "出去了");
//             break;
//           case "setAdmin":
//             ElMessage.info(e.id + "被设置管理员"); //只有被设置的才能收到通知
//             break;
//           case "muteAllMembers":
//             ElMessage.info("全体禁言");
//             break;
//           case "unmuteAllMembers":
//             ElMessage.info("全体取消禁言");
//         }
//       },
//     });
//   };

//   // ===================== 核心功能 =====================

//   /**
//    * 初始化 环信IM SDK
//    * @param initConfig - 配置参数
//    * @throws 初始化失败时抛出错误
//    */
//   const initialize = async (initConfig: ChatConfig) => {
//     try {
//       Object.assign(config, initConfig);

//       // 初始化连接
//       connection.instance = new ChatSDK.connection({
//         appKey: config.appKey,
//       });

//       // 登录
//       await connection.instance.open({
//         user: config.user,
//         pwd: config.password,
//       });

//       setupListeners();
//     } catch (error) {
//       handleError("IM初始化失败", error);
//       throw error;
//     }
//   };

//   /**
//    *创建聊天室
//    */
//   const createRoom = async (roomInfo: Omit<RoomInfo, "id">) => {
//     if (!config.isHost || !connection.instance) {
//       throw new Error("无权限创建聊天室");
//     }
//     try {
//       const options = {
//         name: roomInfo.name,
//         description: roomInfo.description || "直播聊天室",
//         maxusers: roomInfo.maxUsers || 5000,
//       };

//       const room = await connection.instance.createChatRoom(options);
//       state.roomInfo = { ...roomInfo, id: room.id };
//       return room.id;
//     } catch (error) {
//       handleError("创建聊天室失败", error);
//       throw error;
//     }
//   };

//   const joinRoom = async () => {
//     if (!connection.instance || !state.roomInfo?.id)
//       throw new Error("IM未初始化或者没有可加入房间");
//     try {
//       // 加入聊天室
//       await connection.instance.joinChatRoom({
//         roomId: state.roomInfo?.id as string,
//       });
//       // // 获取房间信息
//       // const roomInfo = await connection.instance.getChatRoomDetails(roomId);
//       // state.roomInfo = {
//       //   id: roomId,
//       //   name: roomInfo.name,
//       //   description: roomInfo.description,
//       //   maxUsers: roomInfo.maxusers,
//       // };
//       // 获取成员列表
//       const members = await connection.instance.listChatRoomMembers({
//         pageNum: 1,
//         pageSize: 500,
//         chatRoomId: state.roomInfo?.id as string,
//       });
//       state.members = members.map((m: { member: any }) => m.member);
//     } catch (error) {
//       handleError("加入聊天室失败", error);
//       throw error;
//     }
//   };
//   /**
//    *
//    * @param content -本文消息
//    * @returns
//    */
//   const sendTextMessage = async (content: string) => {
//     if (!connection.instance || !state.roomInfo?.id) return;
//     const option: EasemobChat.CreateTextMsgParameters = {
//       type: "txt",
//       msg: content,
//       to: state.roomInfo.id,
//       chatType: "chatRoom",
//     };
//     const msg = ChatSDK.message.create(option);
//     try {
//       await connection.instance.send(msg);
//       ElMessage.success("文本消息发送成功");
//     } catch (error) {
//       handleError("消息发送失败", error);
//     }
//   };

//   const recallMessage = async (messageId: string) => {
//     if (!connection.instance) return;
//     try {
//       // await connection.instance.recallMessage(messageId);
//       const msg = state.messages.find((m) => m.id === messageId);
//       if (msg) msg.isRecall = true;
//     } catch (error) {
//       handleError("消息撤回失败", error);
//     }
//   };

//   const leaveRoom = async () => {
//     if (!connection.instance || !state.roomInfo?.id) return;

//     try {
//       // await connection.instance.leaveChatRoom(state.roomInfo.id);
//       state.roomInfo = null;
//     } catch (error) {
//       handleError("离开聊天室失败", error);
//     }
//   };

//   // ===================== 辅助方法 =====================
//   const handleError = (msg: string, error: unknown) => {
//     const err = error as Error;
//     ElMessage.error(`${msg}: ${err.message}`);
//     console.error(`[ChatRoom] ${msg}:`, error);
//   };

//   onUnmounted(() => {
//     if (state.isInRoom) leaveRoom();
//     connection.instance?.close();
//   });

//   return {
//     state,
//     config,
//     initialize,
//     createRoom,
//     joinRoom,
//     leaveRoom,
//     sendTextMessage,
//     recallMessage,
//   };
// };

// export default useChatRoom;
